package it.gestionedocumentale.struts.action.admin.utente;

import java.util.List;

import it.gestionedocumentale.model.Gruppo;
import it.gestionedocumentale.model.Profilo;
import it.gestionedocumentale.model.Utente;
import it.gestionedocumentale.spring.service.MyServiceFactory;
import it.gestionedocumentale.struts.form.UtenteForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.beans.BeanUtils;

public class PrepareCRUDUtenteAction extends DispatchAction {
	private static Log log = LogFactory.getLog(PrepareCRUDUtenteAction.class);
	
	
	@Override
	protected ActionForward dispatchMethod(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response, String arg4)
			throws Exception {
		
		Utente utenteSession = (Utente) request.getSession().getAttribute("utenteSession");
		
		if(utenteSession == null) {
			return mapping.findForward("notInSession");
		}
		if(!utenteSession.getGruppo().getCodGruppo().equals("ADMIN")) {
			return mapping.findForward("notAllowed");
		}
		
		UtenteForm utenteForm = (UtenteForm) form;
		Utente utente = null;
		
		try {
			utente = MyServiceFactory.getUtenteService().findById(utenteForm.getIdUtente());
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}
		BeanUtils.copyProperties(utente, utenteForm);
		Profilo profilo = utente.getProfilo();
		BeanUtils.copyProperties(profilo, utenteForm);
		utenteForm.setIdGruppo(utente.getGruppo().getIdGruppo());
		utenteForm.setCodGruppo(utente.getGruppo().getCodGruppo());
		
		return super.dispatchMethod(mapping, form, request, response, arg4);
	}
	
	// ********************* MODIFICA *********************
	
	public ActionForward modifica (ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		List<Gruppo> listaGruppi = null;
		try {
			listaGruppi = MyServiceFactory.getGruppoService().findAll();
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}
		request.setAttribute("listaGruppi", listaGruppi);
		return mapping.findForward("modificaUtenteForm");

	}
	
	
	// ********************* CANCELLA *********************
	
	public ActionForward cancella (ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		return mapping.findForward("cancellaUtenteForm");
		
	}

}
